Ссылки по теме

*   [Настройка сети](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8 "Настройка сети")
*   [Настройка беспроводной сети](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B1%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8 "Настройка беспроводной сети")
*   [dhcpd (Русский)](/index.php/Dhcpd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Dhcpd (Русский)")

*dhcpcd* — свободная реализация клиента DHCP и DHCPv6\. На данный момент является наиболее развитым DHCP-клиентом с открытым исходным кодом. Полный список возможностей вы можете найти на [домашней странице проекта](http://roy.marples.name/projects/dhcpcd/).

**Примечание:** Не путайте *dhcpcd* — DHCP-клиент и [dhcpd](/index.php/Dhcpd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Dhcpd (Русский)"), который является **DHCP-сервером**.

## Contents

*   [1 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
*   [2 Запуск](#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA)
*   [3 Настройка](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0)
    *   [3.1 Статические маршруты](#.D0.A1.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B5_.D0.BC.D0.B0.D1.80.D1.88.D1.80.D1.83.D1.82.D1.8B)
    *   [3.2 Идентификатор клиента](#.D0.98.D0.B4.D0.B5.D0.BD.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.82.D0.BE.D1.80_.D0.BA.D0.BB.D0.B8.D0.B5.D0.BD.D1.82.D0.B0)
    *   [3.3 Ускорение DHCP отключением ARP-сканирования](#.D0.A3.D1.81.D0.BA.D0.BE.D1.80.D0.B5.D0.BD.D0.B8.D0.B5_DHCP_.D0.BE.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5.D0.BC_ARP-.D1.81.D0.BA.D0.B0.D0.BD.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F)
    *   [3.4 Запасной статический профиль](#.D0.97.D0.B0.D0.BF.D0.B0.D1.81.D0.BD.D0.BE.D0.B9_.D1.81.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_.D0.BF.D1.80.D0.BE.D1.84.D0.B8.D0.BB.D1.8C)
*   [4 Хуки](#.D0.A5.D1.83.D0.BA.D0.B8)
    *   [4.1 10-wpa_supplicant](#10-wpa_supplicant)
*   [5 Советы и рекомендации](#.D0.A1.D0.BE.D0.B2.D0.B5.D1.82.D1.8B_.D0.B8_.D1.80.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D0.B0.D1.86.D0.B8.D0.B8)
    *   [5.1 Освобождение арендованного IP-адреса](#.D0.9E.D1.81.D0.B2.D0.BE.D0.B1.D0.BE.D0.B6.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B0.D1.80.D0.B5.D0.BD.D0.B4.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B3.D0.BE_IP-.D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.B0)
*   [6 Решение проблем](#.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC)
    *   [6.1 Client ID](#Client_ID)
    *   [6.2 Освобождение аренды IP-адреса](#.D0.9E.D1.81.D0.B2.D0.BE.D0.B1.D0.BE.D0.B6.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B0.D1.80.D0.B5.D0.BD.D0.B4.D1.8B_IP-.D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.B0)
    *   [6.3 Не удается подключиться к маршрутизатору](#.D0.9D.D0.B5_.D1.83.D0.B4.D0.B0.D0.B5.D1.82.D1.81.D1.8F_.D0.BF.D0.BE.D0.B4.D0.BA.D0.BB.D1.8E.D1.87.D0.B8.D1.82.D1.8C.D1.81.D1.8F_.D0.BA_.D0.BC.D0.B0.D1.80.D1.88.D1.80.D1.83.D1.82.D0.B8.D0.B7.D0.B0.D1.82.D0.BE.D1.80.D1.83)
    *   [6.4 dhcpcd.service конфликтует с udev при старте системы](#dhcpcd.service_.D0.BA.D0.BE.D0.BD.D1.84.D0.BB.D0.B8.D0.BA.D1.82.D1.83.D0.B5.D1.82_.D1.81_udev_.D0.BF.D1.80.D0.B8_.D1.81.D1.82.D0.B0.D1.80.D1.82.D0.B5_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B)
    *   [6.5 Время ожидания](#.D0.92.D1.80.D0.B5.D0.BC.D1.8F_.D0.BE.D0.B6.D0.B8.D0.B4.D0.B0.D0.BD.D0.B8.D1.8F)
*   [7 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5)

## Установка

[Установите](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D0.BE.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2 "Pacman (Русский)") пакет [dhcpcd](https://www.archlinux.org/packages/?name=dhcpcd), доступный в [официальных репозиториях](/index.php/%D0%9E%D1%84%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D1%85 "Официальных репозиториях"). Он является частью группы [base](https://www.archlinux.org/groups/x86_64/base/), поэтому, скорее всего он уже установлен в вашей системе.

Также с пакетом [dhcpcd-ui](https://aur.archlinux.org/packages/dhcpcd-ui/) (доступен в [AUR](/index.php/AUR_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "AUR (Русский)")) вы можете установить графическую оболочку [GTK+](/index.php/GTK%2B "GTK+") для демона *dhcpcd* (и, опционально, для [wpa_supplicant](/index.php/WPA_supplicant_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "WPA supplicant (Русский)")). Он предоставляет диалоговую панель для настройки и позволяет вводить данные для подключения к беспроводным сетям.

[dhcpcd-ui-patched](https://aur.archlinux.org/packages/dhcpcd-ui-patched/) - патченная версия пакета [dhcpcd-ui](https://aur.archlinux.org/packages/dhcpcd-ui/). Она использует AppIndicator вместо GtkStatusIcon и компилируется с gtk3, благодаря чему имеет четкую иконку в трее при использовании с [KDE](/index.php/KDE "KDE").

## Запуск

Вместе с *dhcpcd* предоставляются два юнит-файла [systemd](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Systemd (Русский)"), каждый из которых может быть использован для управления демоном:

*   служба `dhcpcd.service` запускает клиент для всех сетевых интерфейсов.
*   служба `dhcpcd@.service` может использоваться для запуска клиента на отдельном сетевом интерфейсе, например: `dhcpcd@*eth0*.service`.

Чтобы запустить *dhcpcd* вручную, просто наберите:

 `# dhcpcd *eth0*` 
```
dhcpcd: version 5.1.1 starting
dhcpcd: *eth0*: broadcasting for a lease
...
dhcpcd: *eth0*: leased 192.168.1.70 for 86400 seconds

```

**Совет:** Если вы выбрали `dhcpcd.service` и он не запускается, смотрите раздел [#dhcpcd.service конфликтует с udev при старте системы](#dhcpcd.service_.D0.BA.D0.BE.D0.BD.D1.84.D0.BB.D0.B8.D0.BA.D1.82.D1.83.D0.B5.D1.82_.D1.81_udev_.D0.BF.D1.80.D0.B8_.D1.81.D1.82.D0.B0.D1.80.D1.82.D0.B5_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B).

## Настройка

Основная часть настроек выполняется в файле `/etc/dhcpcd.conf`. Некоторые наиболее используемые опции описаны далее. Подробнее о структуре файла и его содержании смотрите в [dhcpcd.conf(5)](https://jlk.fjfi.cvut.cz/arch/manpages/man/dhcpcd.conf.5).

### Статические маршруты

Если вы хотите, чтобы при подключении добавлялись статические маршруты, создайте новый хук-скрипт в `/usr/lib/dhcpcd/dhcpcd-hooks` и напишите в нем команды для добавления маршрутов. Например, чтобы добавить маршрут в подсети `10.11.12.0/24` через шлюз `192.168.192.5`:

 `/usr/lib/dhcpcd/dhcpcd-hooks/40-vpnroute` 
```
ip route add 10.11.12.0/24 via 192.168.192.5

```

Префикс `40` использован для того, чтобы данный скрипт отрабатывал после уже имеющихся хук-скриптов.

### Идентификатор клиента

Сервер DHCP может однозначно идентифицировать клиента посредством различных параметров:

*   имя хоста (в частности то имя, которое отправляет клиент),
*   MAC-адрес сетевого адаптера клиента через который проходит соединение,
*   Identity Association ID (IAID),
*   DHCP Unique Identifier (DUID).

Подробнее смотрите в [RFC 3315](https://tools.ietf.org/html/rfc3315#section-4.2).

В зависимости от настроек DHCP-сервера, какие-то из этих параметров могут быть обязательными, а другие — опциональными.

**Примечание:** Стандартной конфигурации *dhcpcd* в большинстве случаев будет достаточно. Указанные параметры определяются автоматически и ручная настройка обычно требуется только при возникновении проблем.

Если при использовании стандартных настроек не удается получить IP, для настройки вы можете использовать следующие опции в `dhcpcd.conf`:

*   `hostname` — отправляет имя хоста (берется из `/etc/hostname`).
*   `clientid` — отправляет MAC-адрес интерфейса в качестве идентификатора.
*   `iaid *имя_интерфейса*` — извлекает IAID для интерфейса, указанного в опции `interface *имя_интерфейса*`. Обе эти опции должны присутствовать одновременно, дополнительно смотрите [это обсуждение](https://bbs.archlinux.org/viewtopic.php?pid=1388376#p1388376).
*   `duid` — указывает *dhcpcd* использовать из DUID и IAID в качестве идентификатора.

Значение DUID устанавливается в `/etc/dhcpcd.duid`. Для эффективной работы DHCP важно, чтобы это значение было уникальным для конкретной системы, и устанавливалось одинаковым на все сетевые интерфейсы. В свою очередь, IAID представляет собой уникальный идентификатор для каждого сетевого интерфейса в отдельности (смотрите подробнее в [RFC 4361](http://tools.ietf.org/html/rfc4361#section-6.1)).

При использовании [Dynamic DNS](https://en.wikipedia.org/wiki/Dynamic_DNS "wikipedia:Dynamic DNS") особенно необходимо удостовериться в уникальности этих идентификаторов. Если в сети находятся два DNS-клиента с одинаковыми DUID, они будут конфликтовать, поочередно отнимая друг у друга аренду DNS-записи. Это может произойти, например, в случае, если была сделана копия виртуальной машины с другими именем хоста и MAC-адресом адаптера, но DUID в настройках остался прежним.

### Ускорение DHCP отключением ARP-сканирования

*dhcpcd*, следуя рекомендациям стандарта DHCP ([RFC2131](http://www.ietf.org/rfc/rfc2131.txt), раздел 2.2), проверяет при помощи запросов ARP, что присвоенный IP-адрес не используется каким-нибудь другим устройством в сети. Как правило, для небольших домашних сетей в этом нет необходимости, поэтому вы можете ускорить соединение *dhcpcd* примерно на 5 секунд, добавив в `/etc/dhcpcd.conf` строку:

```
noarp

```

Того же эффекта можно достичь, запуская *dhcpcd* с опцией `--noarp`.

### Запасной статический профиль

Вы можете настроить статические параметры IP в *dhcpcd*, которые будут использоваться в качестве резервных, если не удалось получить аренду от сервера. Это полезно для автономных устройств, к которым обычно есть доступ только по сети (например, [Raspberry Pi](/index.php/Raspberry_Pi "Raspberry Pi")) для того, чтобы не потерять возможность с ними соединиться.

В следующем примере создается профиль `static_eth0` с IP `192.168.1.1` и адресом шлюза и DNS `192.168.1.23`, который устанавливается как запасной для `eth0`:

 `/etc/dhcpcd.conf` 
```
# define static profile
profile static_eth0
static ip_address=192.168.1.1
static routers=192.168.1.23
static domain_name_servers=192.168.1.23

# fallback to static profile on eth0
interface eth0
fallback static_eth0

```

Возможны также более сложные варианты настройки, например, совмещение с опцией `arping`. Подробнее смотрите в `dhcpcd.conf(5)`.

## Хуки

*dhcpcd* запускает все скрипты в каталоге `/usr/lib/dhcpcd/dhcpcd-hooks/` в последовательности, определенной стандартным порядком сортировки. Более подробно смотрите в `dhcpcd(5)` и `dhcpcd-run-hooks(8)`.

**Примечание:**

*   Каждый скрипт можно отключить при помощи опции `nohook` в `dhcpcd.conf`.
*   Опция `env` позволяет установить переменные окружения для **всех** хуков. Например, вы можете заставить хук `30-hostname` всегда устанавливать имя хоста, указав `env force_hostname=YES`.

### 10-wpa_supplicant

**Примечание:** Начиная с версии dhcpcd-6.10.0-1 поведение демона по умолчанию изменено: теперь хук 10-wpa_supplicant не запускается по умолчанию! Подробнее: [[1]](https://bbs.archlinux.org/viewtopic.php?id=207416), [[2]](https://gentoo.org/support/news-items/2016-01-08-some-dhcpcd-hooks-are-now-examples.html)

Хук `10-wpa_supplicant` автоматически запускает [WPA supplicant](/index.php/WPA_supplicant "WPA supplicant") для беспроводных интерфейсов. Это происходит только если:

*   процесс *wpa_supplicant* еще не запущен на данном интерфейсе
*   существует файл настроек *wpa_supplicant*. *dhcpcd* проверяет следующие пути:

```
/etc/wpa_supplicant/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant.conf

```

в указанном порядке. Вы можете указать свой список путей, используя опцию `env wpa_supplicant_conf=*путь*` в `/etc/dhcpcd.conf`.

**Примечание:** Хук использует первый файл настроек, который ему удастся найти, и не будет принимать во внимание остальные. Имейте это в виду, если у вас несколько файлов настроек *wpa_supplicant*.

Если вы самостоятельно подключаетесь к беспроводным сетям с помощью *wpa_supplicant*, этот хук может приводить к нежелательным попыткам подключения. Например, если вы остановили *wpa_supplicant*, он может вновь включить сетевой интерфейс. Также, если вы используете [netctl-auto](/index.php/Netctl_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.B5_.D0.BF.D0.B5.D1.80.D0.B5.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D1.84.D0.B8.D0.BB.D0.B5.D0.B9 "Netctl (Русский)"), *wpa_supplicant* будет запускаться автоматически с использованием файла настроек `/run/network/wpa_supplicant_"$interface".conf`, поэтому запуск из хука будет излишним и приведет лишь к появлению ошибок в логе при чтении стандартного файла `/etc/wpa_supplicant/wpa_supplicant.conf`, который содержит лишь примеры и может не являться корректным с точки зрения программы.

Чтобы выключить хук, добавьте `nohook wpa_supplicant` в `dhcpcd.conf`.

## Советы и рекомендации

### Освобождение арендованного IP-адреса

Файл аренды `/var/lib/dhcpcd/dhcpcd-*имя_интерфейса*.lease` (где `*имя_интерфейса*` — имя сетевого интерфейса, для которого имеется назначенный в аренду IP-адрес) содержит последний ответ на запрос аренды, полученный от DHCP-сервера. Он используется для того, чтобы сохранить адрес и срок аренды (атрибут `mtime`). По истечении срока IP-адрес из файла запрашивается снова у DHCP-сервера, и, если адрес свободен, он снова присваивается сетевому интерфейсу клиента. Если вы не хотите, чтобы использовался тот же IP-адрес, просто удалите этот файл и перезапустите *dhcpcd*.

## Решение проблем

### Client ID

Если у вас сеть с DHCPv4, которая фильтрует Client ID, основанные на MAC-адресах, вам скорее всего нужно изменить строку

 `/etc/dhcpcd.conf` 
```
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 Client ID as per RFC4361.
duid

```

на

 `/etc/dhcpcd.conf` 
```
# Use the hardware address of the interface for the Client ID (DHCPv4).
clientid

```

иначе вы не сможете получать аренду от DHCP, если он не может правильно прочесть ваш Client ID [DHCPv6](https://en.wikipedia.org/wiki/DHCPv6 "wikipedia:DHCPv6"). Подробнее смотрите в [RFC 4361](http://tools.ietf.org/html/rfc4361).

### Освобождение аренды IP-адреса

Иногда происходит нежелательное присвоение IP-адреса. Например, когда два маршрутизатора соединены вместе через VPN-канал, и второй маршрутизатор через этот канал присваивает IP клиенту. Чтобы это исправить, освободите IP-адрес, выполнив:

```
# dhcpcd -k

```

Теперь попробуйте снова:

```
# dhcpcd

```

Вероятно, желаемого результата не удастся добиться с первого раза.

### Не удается подключиться к маршрутизатору

С некоторыми маршрутизаторами может возникать проблема, когда к ним не удается подключиться при помощи *dhcpcd*. Для того, чтобы это исправить, закомментируйте или удалите строку

```
require dhcp_server_identifier

```

в файле настроек `/etc/dhcpcd.conf`. Обратите внимание, что это может вызвать новые проблемы, если в вашей сети находятся несколько DHCP-серверов; смотрите [эту страницу](http://technet.microsoft.com/en-us/library/cc977442.aspx) для получения дополнительной информации.

### dhcpcd.service конфликтует с udev при старте системы

`dhcpcd.service` может быть [Systemd (Русский)#включен](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.B2.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD "Systemd (Русский)") без указания сетевого интерфейса. Однако, это может создать т. н. *состояние гонки* (конфликт) с *systemd-udevd* в момент загрузки системы, когда *systemd-udevd* пытается назначить интерфейсу постоянное имя:

```
error changing net interface name wlan0 to wlp4s0: Device or resource busy

```

Чтобы избежать этого, запускайте *dhcpcd* для каждого конкретного сетевого интерфейса отдельно, как описано в разделе [#Запуск](#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D0.BA).

### Время ожидания

Если *dhcpcd* работает на одном сетевом интерфейсе и ему не удается получить аренду в течение 30 секунд (например, если сервер еще не готов), процесс просто выведет сообщение об ошибке и завершится. Чтобы заставить *dhcpcd* ожидать бесконечно, добавьте опцию `timeout` со значением `0`:

 `/etc/systemd/system/dhcpcd@.service.d/timeout.conf` 
```
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -w -q **-t 0** %I
```

Не забудьте [перезагрузить конфигурацию systemd](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.A0.D0.B5.D0.B4.D0.B0.D0.BA.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.B0.D0.BC.D0.B8_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2_.D1.8E.D0.BD.D0.B8.D1.82.D0.BE.D0.B2 "Systemd (Русский)").

## Смотрите также

*   [dhcpcd(8)](http://roy.marples.name/man/html8/dhcpcd.html)
*   [dhcpcd.conf(5)](http://roy.marples.name/man/html5/dhcpcd.conf.html)